package labyrinthe;
import java.util.*;
import personnage.Personnage;


/**
* Interface Labyrinthe.
* Fonctionnalités de base d'un labyrinthe. 
* 
* @author IUT
* @version 20-09-2012
*/
public interface Labyrinthe
{
    /**
    * Méthode publique entrer.<br />
    *
    * Place bob à l'entree du labyrinthe.
    *
    * @param bob
    *           Le personnage se promenant dans le labyrinthe
    */
    public void entrer(Personnage bob);

    /**
    * Méthode publique sortir.<br />
    *
    * Place bob à l'entrée du labyrinthe
    *
    * @param bob
    *           Le personnage se promenant dans le labyrinthe
    * @return boolean
    *           vrai(true) si bob est dans la case de sortie du labyrinthe. Sinon, la méthode retourne faux.
    */
    public boolean sortir(Personnage bob);

    /**
    * Méthode publique sallesAccessibles.<br />
    *
    * Toutes les salles dans lesquels bob peut se déplacer.
    * Ce sont les salles adjacentes.
    *
    * @param bob    
    *           Le personnage se promenant dans le labyrinthe
    * @return Collection<Salle> 
    *           Une collection contenant les salles (Objets Salle) accessibles par bob.
    */
    public Collection<Salle> sallesAccessibles(Personnage bob);
    

    /**
    * Méthode publique getSalles.<br />
    *
    * Accesseur sur les salles du labyrinthe
    *
    * @return Collection<Salle>
    *           Une collection contenant les salles (Objets Salle) du labyrinthe.
    */
    public Collection<Salle> getSalles();
    
    /**
    * Méthode publique getEntree.<br />
    *
    * Accesseur sur la salle d'entrée
    *
    * @return Salle
    *           L'objet Salle correspondant à la salle d'entrée du labyrinthe
    */
    public Salle getEntree();

    /**
    * Méthode publique getSalles.<br />
    *
    * Accesseur sur la salle de sortie
    *
    * @return Salle
    *           L'objet Salle correspondant à la salle de sortie du labyrinthe
    */
    public Salle getSortie();
}
